উদাহরণ সহ Transaction Management

Java Technologies - স্প্রিং ওআরএম (Spring ORM) Spring ORM এ Transaction Management |
66
66

স্প্রিং ফ্রেমওয়ার্কে ট্রানজ্যাকশন ম্যানেজমেন্ট একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি ডেটাবেসে Atomicity, Consistency, Isolation, এবং Durability (ACID) প্রিন্সিপাল মেনে ডেটা পরিচালনা নিশ্চিত করে। স্প্রিং ORM ট্রানজ্যাকশন পরিচালনার জন্য Declarative এবং Programmatic পদ্ধতি প্রদান করে। সাধারণত Declarative পদ্ধতি সবচেয়ে বেশি ব্যবহৃত হয় কারণ এটি সরল ও কার্যকর।


ট্রানজ্যাকশন ম্যানেজমেন্টের ধরন

Declarative Transaction Management

এটি অ্যানোটেশন বা XML কনফিগারেশনের মাধ্যমে ট্রানজ্যাকশন পরিচালনা করে। কোডে কম জটিলতা থাকে এবং সহজেই ট্রানজ্যাকশন পরিচালনা করা যায়।

Programmatic Transaction Management

এটি ম্যানুয়ালি ট্রানজ্যাকশন শুরু এবং শেষ করার জন্য TransactionTemplate বা PlatformTransactionManager ব্যবহার করে।


উদাহরণ: Spring ORM-এ Declarative Transaction Management

প্রয়োজনীয় ডিপেনডেন্সি যোগ করা

pom.xml ফাইলে ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId> <!-- H2 ডাটাবেস ব্যবহার -->
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

Entity ক্লাস তৈরি করা

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String accountHolder;
    private Double balance;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAccountHolder() {
        return accountHolder;
    }

    public void setAccountHolder(String accountHolder) {
        this.accountHolder = accountHolder;
    }

    public Double getBalance() {
        return balance;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }
}

JpaRepository ইন্টারফেস তৈরি করা

import org.springframework.data.jpa.repository.JpaRepository;

public interface AccountRepository extends JpaRepository<Account, Long> {
}

ট্রানজ্যাকশন ম্যানেজমেন্ট ব্যবহার করে সার্ভিস তৈরি করা

import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AccountService {

    @Autowired
    private AccountRepository accountRepository;

    @Transactional
    public void transfer(Long fromAccountId, Long toAccountId, Double amount) {
        Account fromAccount = accountRepository.findById(fromAccountId).orElseThrow();
        Account toAccount = accountRepository.findById(toAccountId).orElseThrow();

        if (fromAccount.getBalance() < amount) {
            throw new IllegalArgumentException("Insufficient balance");
        }

        fromAccount.setBalance(fromAccount.getBalance() - amount);
        toAccount.setBalance(toAccount.getBalance() + amount);

        accountRepository.save(fromAccount);
        accountRepository.save(toAccount);
    }
}

কন্ট্রোলার তৈরি করা

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/accounts")
public class AccountController {

    @Autowired
    private AccountService accountService;

    @PostMapping("/transfer")
    public String transfer(@RequestParam Long fromAccountId,
                           @RequestParam Long toAccountId,
                           @RequestParam Double amount) {
        accountService.transfer(fromAccountId, toAccountId, amount);
        return "Transfer successful!";
    }
}

অ্যাপ্লিকেশন প্রোপার্টিজ কনফিগার করা

application.properties ফাইলে ডাটাবেস কনফিগারেশন যোগ করুন:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

প্রোগ্রামের কার্যপ্রবাহ

  1. HTTP POST রিকোয়েস্ট ব্যবহার করে /accounts/transfer এ ডাটা পাঠান।
  2. সার্ভিস স্তরে @Transactional অ্যানোটেশন ব্যবহার করা হয়েছে, যা নিশ্চিত করে যে ট্রানজ্যাকশন সফল হলে ডাটাবেসে পরিবর্তন সংরক্ষিত হবে। ব্যর্থ হলে সমস্ত অপারেশন রোলব্যাক (Rollback) হবে।

সারাংশ

স্প্রিং ORM-এ ট্রানজ্যাকশন ম্যানেজমেন্ট সহজ এবং কার্যকর। @Transactional অ্যানোটেশন ব্যবহার করে Declarative পদ্ধতিতে ডেটাবেস অপারেশন পরিচালনা করা যায়। এটি ডেটা কনসিস্টেন্সি নিশ্চিত করে এবং ডেভেলপারদের জটিল কোড লিখতে হয় না।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion